package com.UnionPayCenter.distribution.service;

import com.UnionPayCenter.distribution.dto.*;
import com.UnionPayCenter.distribution.entity.UserDistributionDO;
import com.UnionPayCenter.distribution.vo.*;
import com.github.pagehelper.PageInfo;

import java.io.IOException;
import java.util.List;

/**
 * @author Noah
 * @since 1.0.0, 2019/07/01
 */
public interface DistributionQueryService {

    /**
     * 获取商品的分润比例信息
     *
     * @param baseDTO 查询基本信息
     * @return 分润比例
     */
    DistributionTemplateVO queryShareProp(DistributionBaseDTO baseDTO);


    /**
     * 根据对手ID获取用户信息
     *
     * @param bId                商铺ID
     * @param shopId             店铺ID
     * @param counterpartyUserId 对手ID
     * @return
     */
    UserDistributionDO getUserDistributionDoByCounterpartyUser(Long bId, Long shopId, Long counterpartyUserId);


    /**
     * 根据用户查询用户账户信息
     *
     * @param userBaseDTO 用户信息
     * @return 用户分销信息
     */
    DistributionUserAccountVO getDistributionAccount(DistributionUserBaseDTO userBaseDTO);

    /**
     * 根据用户查询用户账户收益流水列表 （按照时间降序）
     *
     * @param userBaseDTO 用户信息
     * @return 用户账户收益流水列表
     */
    PageInfo<DistributionUserEarningsVO> pageDistributionEarningsByUserId(DistributionUserBasePageDTO userBaseDTO);

    /**
     * 根据用户查询用户账户下级用户列表 （按照时间降序）
     *
     * @param userBaseDTO 用户信息
     * @return 邀请人信息列表
     */
    PageInfo<DistributionUserInviterVO> pageDistributionInviterByUserId(DistributionUserBasePageDTO userBaseDTO);

    /**
     * 根据用户查询用户账户订单列表 （按照时间降序）
     *
     * @param userBaseDTO 用户信息
     * @return 邀请人信息列表
     */
    PageInfo<DistributionUserOrderVO> pageDistributionOrderByUserId(DistributionUserBasePageDTO userBaseDTO);


    /**
     * 根据用户查询用户账户订单列表 （按照时间降序）
     *
     * @param mobileDTO 用户信息
     * @return 邀请人信息列表
     */
    List<DistributionUserOrderVO> listDistributionOrderByUserMobile(DistributionUserMobileDTO mobileDTO);

    /**
     * 根据用户查询用户账户订单列表 （按照时间降序）
     *
     * @param userBaseDTO 用户信息
     * @return 邀请人信息列表
     */
    PageInfo<DistributionUserOrderVO> pageDistributionOrderByUserMobile(DistributionUserMobilePageDTO userBaseDTO);

    /**
     * 分销流水信息导出
     *
     * @param orderVOList 流水信息
     * @return
     * @throws IOException
     */
    String exportShopOrder(List<DistributionUserOrderVO> orderVOList) throws IOException;

    /**
     * 根据手机号获取分销员列表信息
     *
     * @param mobilePageDTO 手机号查询条件
     * @return
     */
    PageInfo<DistributionUserVO> pageDistributionUserByMobile(DistributionUserByMobilePageDTO mobilePageDTO);


    /**
     * 获取用户所有的关系
     *
     * @param mobileDTO 手机号
     * @return
     */
    DistributionUserRefVO listAllDistributionUserRef(DistributionUserMobileDTO mobileDTO);

    /**
     * 获取奖励信息
     * @param distributionBaseDTO
     * @return
     */
    DistributionIncentiveVO getIncentive ( DistributionBaseDTO distributionBaseDTO);
}
